#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void traverse(int arr[], int size)
{
    for (int i = 0; i < size; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main()
{
    // int arr[] = {4, 1, 3, 1, 5, 2};
    int arr[] = {1, 1, 4, 5, 2, 3};
    int size = sizeof(arr) / sizeof(arr[0]);
    printf("排序前：");
    traverse(arr, size);
    // 冒泡排序    O(n^2)
    for (int i = 0; i < size - 1; i++)
    {
        int flag = 0; // 标记是否发生了交换
        printf("第%d轮排序:", i + 1);
        traverse(arr, size);
        for (int j = 0; j < size - 1 - i; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;

                flag = 1;
            }
        }
        if (flag == 0)
        {
            printf("排序完成\n");
            break; // 如果一次循环没有发生交换，说明已经有序，直接退出循环
        }
    }
    printf("排序后：");
    traverse(arr, size);
    return 0;
}